package main.普通数组;

/**
 * @author tmh
 * @date 2024/7/18 20:58
 * @description
 */
public class T238除自身以外数组的乘积 {

    public int[] productExceptSelf(int[] nums) {
        //条件判断
        if (nums.length == 0) {
            return nums;
        }
        //定义一个数组ans[]，这个数组先保存左面数的乘积，最后再来保存右面数的乘积
        int[] ans = new int[nums.length];
        //第一个数左面的乘积为1
        ans[0] = 1;
        //定义一个变量temp用来保存右边数组的乘积，初始值是1
        int temp = 1;
        //从第二个数开始计算每个数左面的乘积
        //每个数左面的乘积等于第一排乘第二排的值
        for (int i = 1; i < nums.length; i++) {
            ans[i] = nums[i - 1] * ans[i - 1];
        }
        //从倒数第二个数开始计算每个数右面的乘积和最后的结果,temp表示右面数的乘积
        //每个数右面的乘积的第一排乘以第三排
        for (int i = nums.length - 2; i >= 0; i--) {
            temp = nums[i + 1] * temp;
            ans[i]=ans[i]*temp;
        }
        return ans;
    }
}
